﻿////#include <iostream>
////using namespace std;
////class Month
////{
////protected:
////    int num_;
////public:
////    Month(int num) :num_(num){}
////    void display()
////    {
////        if (num_ == 1)
////        {
////            cout << "January" << endl;
////        }
////        else if (num_ == 2)
////        {
////            cout << "February" << endl;
////        }
////        else if (num_ == 3)
////        {
////            cout << "March" << endl;
////        }
////        else if (num_ == 4)
////        {
////            cout << "April" << endl;
////        }
////        else if (num_ == 5)
////        {
////            cout << "May" << endl;
////        }
////        else if (num_ == 6)
////        {
////            cout << "June" << endl;
////        }
////        else if (num_ == 7)
////        {
////            cout << "July" << endl;
////        }
////        else if (num_ == 8)
////        {
////            cout << "August" << endl;
////        }
////        else if (num_ == 9)
////        {
////            cout << "September" << endl;
////        }
////        else if (num_ == 10)
////        {
////            cout << "October" << endl;
////        }
////        else if (num_ == 11)
////        {
////            cout << "November" << endl;
////        }
////        else if(num_==12)
////        {
////            cout << "December" << endl;
////        }
////        else
////        {
////            cout << "error" << endl;
////        }
////    }
////};
////int main()
////{
////    int t, num;
////    cin >> t ;
////    Month** month = new Month*[t];
////    for (int i = 0; i < t; i++)
////    {
////        cin >> num;
////        month[i]=new Month(num);
////        month[i]->display();
////    }
////    return 0;
////}
////
//#include <iostream>
//using namespace std;
//#include <iostream>
//using namespace std;
//int main()
//{
//    int t, n, c, score, mid = 0, arr[100];
//    cin >> t;
//    int* p = arr;
//    for (int j = 0; j < t; j++)
//    {
//        cin >> n;
//        mid = n / 2;
//        for (int i = 0; i < n; i++)
//        {
//            cin >> score;
//            arr[i] = score;
//        }
//        cin >> c;
//        p = &arr[mid];
//        cout << *(p - 1) << " " << *(p + 1) << endl;
//        int* m = &arr[c - 1];
//        cout << *m << endl;
//    }
//    return 0;
//}
//#include <iostream>
//#include <iomanip>
//using namespace std;
//class Date
//{
//protected:
//	int y_,m_,d_;
//public:
//	Date() :y_(2000), m_(1), d_(1) {};
//	Date(int y, int m, int d) :y_(y), m_(m), d_(d) {};
//	int getYear()
//	{
//		return y_;
//	}
//	int getMonth()
//	{
//		return m_;
//	}
//	int getDay()
//	{
//		return d_;
//	}
//	void setDate(int y, int m, int d)
//	{
//		y_ = y; m_ = m; d_ = d;
//	}
//	void addOneDay()
//	{
//		cout << "Today is " << y_ << "/" << setfill('0') << setw(2) << m_ << "/"<< setfill('0') << setw(2) << d_ << endl;
//		int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//		if (y_ % 400 == 0 || y_ % 4 == 0 && y_ % 100 != 0)
//		{
//			month[2] = 29;
//		}
//		d_++;
//		if (d_ > month[m_])
//		{
//			d_ = d_ - month[m_];
//			m_++;
//			if (m_ > 12)
//			{
//				y_++;
//				m_ = 1;
//			}
//		}
//	}
//	void print()
//	{
//		cout << "Tomorrow is " << y_ << "/" << setfill('0') << setw(2) << m_ << "/" <<setfill('0') << setw(2) << d_ << endl;
//	}
//};
//int main()
//{
//	int t,y,m,d;
//	cin >> t;
//	Date date;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> y >> m >> d;
//		if (i % 2 == 0)
//		{
//			date=Date (y, m, d);
//		}
//		else
//		{
//			date.setDate(y, m, d);
//		}
//		date.addOneDay();
//		date.print();
//	}
//	return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//class Point
//{
//    double x, y;
//public:
//    Point() :x(0), y(0) {   cout << "Constructor." << endl;};
//    Point(double x_value, double y_value) :x(x_value), y(y_value) {};
//    double getX()
//    {
//        return x;
//    }
//    double getY()
//    {
//        return y;
//    }
//    void set(double x1, double y1) { x = x1; y = y1; }
//    double getDisTo(Point& p)
//    {
//        double s = sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
//        return s;
//    }
//    ~Point()
//    {
//        cout << "Distructor." << endl;
//    }
//};
//int main()
//{
//    int t, n;
//    double x, y;
//    cin >> t ;
//    //Point point;会多一次析构，因为是构造函数
//    for (int i = 0; i <  t; i++)
//    {
//        cin >> n;
//        Point* point = new Point[n];
//        for (int j = 0; j < n; j++)
//        {
//            cin >> x >> y;
//            point[j].set(x, y);               // point[j]=point(x, y);  创建了临时对象，导致结果输出是  构造+析构+结果数值输出
//        }
//        double s = 0;
//        double max = 0;
//        int index1 = 0,index2 = 0;
//        for (int j = 0; j < n; j++)
//        {
//            for (int k = j+1; k < n; k++)
//            {
//               s= point[j].getDisTo(point[k]);
//               if (s > max)
//               {
//                   max = s;
//                   index1 = j;
//                   index2 = k;
//               }
//            }
//        }
//        cout << "The longeset distance is " << fixed << setprecision(2) <<max<< ",between " << "p["<<index1<<"] and p["<<index2<<"]." << endl;
//        delete[] point;
//    }
//    return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//int main()
//{
//	int t,n;
//	char type;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> type >> n;
//		if (type == 'I')
//		{
//			int sum = 0;
//			int* arr = new int[n];
//			int* p = arr;
//			for (int j= 0; j< n; j++)
//			{
//				cin >> *p;
//				sum = sum + *p;
//				p++;
//			}
//			double av = sum * 1.0 / n;
//			cout << av << endl;	
//			delete[]arr;
//		}
//		else if (type == 'C')
//		{
//			char* arr = new char[n];	
//			char* p = arr; // p指向数组首地址
//			for (int j = 0; j< n; j++)
//			{
//				cin >> *p;
//				p++;
//			}
//			
//			p = arr;  // 重置p到数组开头，准备遍历查找最大值
//			char max =p[0];
//			for(int j=1;j<n;j++)
//			{
//				if (*p > max)
//				{
//					max = *p;
//				}
//				p++;
//			}
//			cout << max << endl;
//			delete[]arr;
//		}
//		else if (type == 'F')
//		{
//			float* arr = new float[n];
//			float* p = arr;
//			for (int j = 0; j < n; j++)
//			{
//				cin >> *p;
//				p++;
//			}
//			p = arr;
//			float min = p[0];
//			for (int j = 1; j < n; j++)
//			{
//				if (*p < min)
//				{
//					min = *p;
//				}
//				p++;
//			}
//			cout << min << endl;
//			delete[]arr;
//		}
//	
//	}
//	return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//int main()
//{
//	int t;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		int arr[2][3];//二维数组 arr，包含 2 行 3 列
//		int(*p)[3] = arr;//声明了一个数组指针 p，并将二维数组 arr 的首地址赋值给 p。
//		for (int j = 0; j < 2; j++)
//		{
//			for (int k = 0; k < 3; k++)
//			{
//				cin >> arr[j][k];
//			}
//		}
//		int arr1[3][2];
//		int (*p1)[2] = arr1;
//		for (int j = 0; j < 2; j++)
//		{
//			for (int k = 0; k < 3; k++)
//			{
//				p1[2 - k][j] = p[j][k];
//			}
//		}
//		for (int j = 0; j < 3; j++)
//		{
//			for (int k = 0; k < 2; k++)
//			{
//				cout << p1[j][k] << " ";
//			}
//			cout<< endl;
//		}
//	}
//	return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//int main()
//{
//	const char * month[13]= { 0,"January","Febtuary","March","April","May","June","July","August","September","October","November","December" };
//	int t,n;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> n;
//		if (n > 1 && n < 12)
//		{
//			cout << month[n];
//		}
//		else
//			cout << "error" << endl;
//	}
//	return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//int main()
//{
//	int t,n,score[100],num;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> n;
//		for (int i = 0; i < n; i++)
//		{
//			cin >> score[i];
//		}
//		cin >> num;
//		int mid = n / 2;
//		int* p = &score[mid];
//		cout << *(p - 1) << endl << *(p + 1) << endl;
//		int dis = num - 1 - mid;// num = 3, 3 - 1 - 3 = -1;
//		cout << *(p+dis) << endl;//p是真的是中间位置的数,前面先减后面才能使用p加回来 -1+3=2
//	}
//	return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//class Point
//{
//    double x, y;
//public:
//    Point() :x(0), y(0) {cout << "Constructor." << endl;};//写在缺省构造函数里面
//    Point(double x_value, double y_value) :x(x_value), y(y_value) {}; 
//    ~Point()// 析构函数
//    {
//        cout << "Distructor." << endl;
//    }
//    double getX()// 返回x的值
//    {
//        return x;
//    }
//    double getY() // 返回y的值
//    {
//        return y;
//    }
//    void setXY(double x1, double y1) { x = x1; y = y1; }
//    double getDisTo(Point& p)
//    {
//        double s = sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
//        return s;
//    }
//};
//int main()
//{
//    int t,n;
//    double x, y;
//    cin >> t;
//    // Point point如果写了会多一次构造“Constructor.”；
//    for (int i = 0; i < t; i++)
//    {
//        cin >> n;
//        Point* point = new Point[n];//动态数组new
//        for (int j = 0; j < n; j++)
//        {
//            cin >> x >> y;
//            point[j].setXY(x, y);
//        }
//        double max = 0;
//        int index1 = 0, index2 = 0;
//        for (int j = 0; j < n;j++)
//        {
//            for (int k = 1; k < n; k++)
//            {
//                double s = point[j].getDisTo(point[k]);
//                if (s > max)
//                {
//                    max = s;
//                    index1 = j;
//                    index2 = k;
//                }
//            }  
//        }
//        cout << "The longeset distance is " << fixed << setprecision(2)<<max << ",between p[" << index1 << "] and p[" << index2 << "]." << endl;
//        delete[] point;
//    }
//    return 0;
//}
//#include <iostream>
//#include <iomanip>
//#include <cmath>
//using namespace std;
//int main()
//{
//	int t,n;
//	char type;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		int sum = 0;
//		cin >> type >> n;
//		if (type == 'I')
//		{
//			int* arr = new int[n];//动态数组
//			int* p = arr;//（指针）指示p为数组首字母的地址
//			for (int j = 0; j < n; j++)
//			{
//				cin >> *(p+j);//   cin>>*p;p++;
//				sum = sum + *(p + j);
//			}
//			double av = sum * 1.0 / n;
//			cout << av << endl;
//			delete[]arr;
//		}
//		else if (type == 'C')
//		{
//			char* arr = new char[n];
//			char* p = arr;
//			for (int j = 0; j < n; j++)
//			{
//				cin >> *p;
//				p++;//指针发生了移位，所以后面需要p=arr;将p重新定位到数组首位的位置；如果是cin>>*(p+j),后面就不需要p=arr这一句
//			}
//			p = arr;
//			char max = p[0];
//			for (int j = 0; j < n; j++)
//			{
//				if (*p > max)
//				{
//					max = *p;
//				}
//				p++;
//			}
//			cout << max << endl;
//			delete[]arr;
//		}
//		else 
//		{
//			double * arr = new double[n];
//			double* p = arr;
//			for (int j = 0; j < n; j++)
//			{
//				cin >> *(p + j);
//			}
//			//p = arr;
//			double min = p[0];
//			for (int j = 0; j < n; j++)
//			{
//				if (*p < min)
//				{
//					min = *p;
//				}
//				p++;
//			}
//			cout << min << endl;
//			delete[]arr;
//		}
//	}
//	return 0;
//}
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
	int t;
	cin >> t;
	int arr[2][3];//二维数组
	int (*p)[3] = arr; //声明了一个数组指针 p，并将二维数组 arr 的首地址赋值给 p。
	for (int i = 0; i < t; i++)
	{
		for (int j = 0;j < 2; j++)
		{
			for (int k = 0; k < 3; k++)
			{
				cin >> arr[j][k];
			}
		}
		//第一种方法
		int arr1[3][2];
		int (*q)[2] = arr1;
		for (int j = 0; j < 2; j++)
		{
			for (int k = 0; k < 3; k++)
			{
				q[2 - k][j] = p[j][k];
			}
		}
		for (int j = 0; j < 3; j++)
		{
			for (int k = 0; k < 2; k++)
			{
				cout << q[j][k]<<" ";
			}
			cout << endl;
		}
		//第2种方法
		//j --> 2-k; k --> j
		//m行n列的二维矩阵，第i行第j列的元素与首元素的距离为i*n+j，序号从0开始计算
		for (int j = 0; j < 3; j++)    //原来的j列
		{
			for (int k = 0; k < 2; k++)//原来的k行
			{
				cout << *(*p+k*3+2-j) << " ";//解引用
			}
			cout << endl;
		}
	}
	return 0;
}
